package bit

import (
	"math/bits"
)

/*
给定一个正整数 n，找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1，返回 0 。

如果只有 0 将两个 1 分隔开（可能不存在 0 ），则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如，"1001" 中的两个 1 的距离为 3 。
输入：n = 8
输出：0
解释：8 的二进制是 "1000" 。
在 8 的二进制表示中没有相邻的两个 1，所以返回 0 。
示例 3：
*/
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
func binaryGap(n int) int {
	//10110
	bigL := bits.Len(uint(n))
	left := 1
	right := 1
	maxLen := 0
	//默认数据不超过int32
	mx := 1 << (bigL - 1) //最高位=1 的32位二进制数
	//从左往右找第一个1
	for right <= bigL {
		if (mx & n) != 0 {
			maxLen = max(maxLen, right-left)
			left = right
		}
		mx >>= 1
		right++
	}
	return maxLen
}
